# 当i 存在在nums中，则
def firstMissingPositive(nums):
    n = len(nums)
    # 将原数组的的负数转化为比num的长度大1的数
    for i in range(n):
        if nums[i] <= 0:
            nums[i] = n + 1
    # i表示的是数组的这个位置的数 标记为负数 代表出现过
    for i in range(n):
        num = abs(nums[i])
        if num <= n:
            nums[num - 1] = -abs(nums[num - 1])
    # 遍历1到n ,当数组中的值 > 0 代表缺失的值
    for i in range(n):
        if nums[i] > 0:
            return i + 1
    return n + 1


print(firstMissingPositive([1, 2, 0]))  # 3
print(firstMissingPositive([3, 4, -1, 1]))  # 2
print(firstMissingPositive([7, 8, 9, 11, 12]))  # 1
print(firstMissingPositive([2, 1]))  # 3
